/* 找到单链表中值为key的元素，将其与前一个结点位置互换 */

#include <iostream>
#include "linklist.h"
using namespace std;

// 查找值为k的结点，将其与前一个结点交换
void fun(LNode *&L, int k)
{
  LNode *l = L;
  
  // 首结点的值为k
  if (l->next->data == k)
    return;
  
  // 遍历链表，找到值为k的结点的 前一个结点
  while (l->next->next)
    if (l->next->next->data != k)
      l = l->next;
    else
      break;
  
  // 交换k值结点与前一个结点
  if (l->next->next != NULL)
  {
    LNode *p = l->next;
    LNode *q = p->next;
    p->next = q->next;
    l->next = q;
    q->next = p;
  }
}

int main()
{
  // 创建单链表
  LNode *L = create_linklist();
  
  // 找到值为3的结点
  fun(L, 3);
  
  // 遍历链表并打印
  while (L->next != NULL)
  {
    cout << L->next->data;
    L = L->next;
  }
  return 0;
}